package feeinterface.protocol.req;

import org.apache.log4j.Logger;
import feeinterface.dao.ChannelWapDao;
import feeinterface.protocol.business.ParseFetch;
import feeinterface.protocol.res.FetchStep;
import feeinterface.protocol.res.Res010003;
import feeinterface.protocol.utils.Constants;


/**
 * 网页类计费模式后台业务流程支持（代码010003） 请求URL ：http://<ip>:<port>/interface/exchange
 * 
 * @author 黄杰
 * 
 */
public class Pro010003 extends ProExchange {
	/**
	 * 日志
	 */
	private  static  Logger log = Logger.getLogger(Pro010003.class); // 跟类名一样

	@Override
	public Object genBean() throws Exception {
		// 获取抓取方式
		Res010003 res = new Res010003();
		try {
			// 根据通道编号获取抓取步骤
			String wapFetchStep = ChannelWapDao
					.getFetchByChannelID(this.ChannelID);
			// 解析数据库中抓取步骤
			FetchStep fetch[] = ParseFetch.analyse(wapFetchStep);
			if (fetch != null && fetch.length > 0) {
				if (fetch.length >= this.AccessStep) {

					// 从网页字符串中抓取URL，
					// 1、抓取的wap内容。2、抓取的关键字系列(以逗号分割)。3、抓取的最后关键字
					String url = ParseFetch.StringIntercept(WapContent,
							fetch[this.AccessStep].FindKeys,
							fetch[this.AccessStep].EndKey);
					log.debug("抓取的URL：" + url);
					// 拼装请求包
					res.Url = url;
					res.Status = Constants.Status.SUCCESS;
					res.Message = "成功";
				} else {

					log.debug("数据库中无法找到抓取步骤：" + this.AccessStep);
					res.Status = Constants.Status.FAIL;
					res.Message = "数据库中无法找到抓取步骤：" + this.AccessStep;

				}
			} else {
				log.debug("数据库中没有定义抓取步骤！");
				res.Status = Constants.Status.FAIL;
				res.Message = "数据库中没有定义抓取步骤！";
			}
		} catch (Exception e) {
			log.error("抓取URL出错！", e);
			throw new ExchangeException(Constants.Status.FAIL, "抓取URL出错！");
		}
		return res;
	}

	@Override
	public String validate() throws Exception {
		if (ChannelID == null)
			return "网络繁忙，请重新登录再试!";
		if (AccessStep == null)
			return "网络繁忙，请重新登录再试!";
		if (WapContent == null)
			return "网络繁忙，请重新登录再试!";
		return null;
	}
	/**
	 * 付费记录编号，32位随机编号
	 */
	public String FeeID;
	/**
	 * 计费类型，由服务端定义，每个值的含义到时候见附件。 1：短信 2：彩信 等等
	 */
	public Integer FeeType;
	/**
	 * 通道ID
	 */
	public Integer ChannelID;
	/**
	 * 包id
	 */
	public String PacketID;
	/**
	 * 版本号id，函数库的版本号
	 */
	public Integer Ver;
	/**
	 * 合作业务ID，后台通过此id可以找到对应的产品， 产品的概念：好玩吧 ，哈密瓜等
	 */
	public Integer COID;
	/**
	 * 平台简称
	 */
	public String Platform;
	/**
	 * 短信中心号码，允许为空
	 */
	public String SmsCenter;
	/**
	 * IMSI
	 */
	public String IMSI;
	/**
	 * 虚拟机版本号
	 */
	public Integer VmVer;
	/**
	 * 访问的步骤，不同的步骤处理的方式不一样
	 */
	public Integer AccessStep;
	/**
	 * 返回的网页内容，把所有的内容上传上来处理
	 */
	public String WapContent;

	/**
	 * 无参构造函数
	 */
	public Pro010003() {
		this.Protocol = "010003";
	}

}
